package com.migration.service;

import com.migration.model.newdb.RiskChainCause;
import com.migration.model.olddb.RaDeviateReason;
import jakarta.persistence.EntityManager;

import java.util.List;
import java.util.Map;

/**
 * 事故链-原因表服务接口
 */
public interface RiskChainCauseService {

    /**
     * 迁移原因数据
     *
     * @param oldEntityManager 旧数据库实体管理器
     * @param newEntityManager 新数据库实体管理器
     * @param reasonList 需要迁移的原因列表
     * @param reasonToTenantMap 原因ID与租户ID的映射
     * @param reasonWithConsequenceSet 有后果的原因ID集合
     * @return 处理的数据条数
     */
    List<RiskChainCause> migrateCauseData(
        EntityManager oldEntityManager,
        EntityManager newEntityManager,
        List<RaDeviateReason> reasonList,
        Map<Long, Integer> reasonToTenantMap,
        java.util.Set<Long> reasonWithConsequenceSet
    );

    /**
     * 获取所有未删除的原因数据
     *
     * @param oldEntityManager 旧数据库实体管理器
     * @return 原因数据列表
     */
    List<RaDeviateReason> getAllReasons(EntityManager oldEntityManager);

    /**
     * 构建原因ID与租户ID的映射关系
     *
     * @param oldEntityManager 旧数据库实体管理器
     * @param reasonIds 原因ID列表
     * @return 原因ID与租户ID的映射
     */
    Map<Long, Integer> buildReasonToTenantMap(EntityManager oldEntityManager, List<Long> reasonIds);

    /**
     * 构建有后果的原因ID集合
     *
     * @param detailList 事故链详情列表
     * @return 有后果的原因ID集合
     */
    java.util.Set<Long> buildReasonWithConsequenceSet(List<com.migration.model.olddb.RaFaultChainsDetail> detailList);
} 